import util from '~/libs/util';
import { Message } from 'iview';

export default function({ $axios, redirect }) {
  // 记录和显示错误
  function errorLog(err) {
    // 添加到日志
    // 打印到控制台
    if (process.env.NODE_ENV === 'development') {
      util.log.danger('>>>>>> Error >>>>>>');
      console.log(err);
    }
    // 显示提示
    Message.error({
      content: err.message,
      duration: 5,
    });
  }

  // 请求拦截器
  $axios.interceptors.request.use(config => {
    // 在请求发送之前做一些处理
    const token = util.cookies.get('token');
    // 让每个请求携带token-- ['authorization']为自定义key 请根据实际情况自行修改
    if (token && token !== 'undefined') {
      config.headers.authorization = 'Bearer ' + token;
    }
    return config;
  });

  // 响应拦截器
  $axios.interceptors.response.use(
    response => {
      const res = response.data;
      if (res.code !== 200) {
        Message.error({
          content: res.message,
          duration: 3,
        });
        return Promise.reject(res.message);
      } else {
        return res.result;
      }
    },
    error => {
      console.log(error);
      if (error.response && error.response.status === 401) {
        util.cookies.remove();
        if (error.config.url.indexOf('logout') === -1) {
          Message.error({
            content: '登陆信息已过期,请重新登陆!',
            duration: 3,
          });
        }
        setTimeout(() => {
          redirect('/login');
        }, 1000);
      } else if (error.response && error.response.status === 500) {
        errorLog(new Error(`系统错误!: ${error.config.url}`));
      } else if (error.message && error.message.indexOf('timeout') > -1) {
        errorLog(new Error(`网络超时!: ${error.config.url}`));
      } else if (error.type === '403') {
        errorLog(new Error(`没有请求权限!: ${error.config.url}`));
      } else {
        errorLog(new Error(`网络错误!: ${error.config.url}`));
      }
      return Promise.reject(error);
    }
  );
}
